package com.lingxu.base.system.manage.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lingxu.base.system.manage.entity.SysUser;
import com.lingxu.base.system.manage.entity.SysUserRole;
import com.lingxu.base.system.manage.entity.SysUserRoleQueryVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Description: 用户角色关联表
 * @Author: LingXu
 * @Date:   2021-01-04
 * @Version: V1.0.1
 */
public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {

    /**
     * 用户角色关联表-分页列表查询
     * @param page 分页信息
     * @param sysUserRole 用户角色关联表
     * @return 用户角色关联表列表
     */
    IPage<SysUserRole> queryList(@Param("page") Page<SysUserRole> page, @Param("sysUserRole") SysUserRole sysUserRole);

    /**
     * 用户角色关联表-列表查询
     * @param sysUserRole 用户角色关联表
     * @return 用户角色关联表列表
     */
    List<SysUserRole> queryList(@Param("sysUserRole") SysUserRole sysUserRole);

    /**
     * 为角色取消用户
     * @param roleId
     * @return
     */
    Integer cancelRoleUsers(@Param("roleId")String roleId, @Param("userIds")String userIds);

    /**
     * 为角色取消所有用户
     * @param roleId
     * @return
     */
    Integer cancelRoleUsersAll(@Param("roleId")String roleId);

    /**
     * 为用户取消全部角色
     * @param userId
     * @return
     */
    Integer cancelUserRolesAll(@Param("userId")String userId);

    /**
     * 为用户取消角色
     * @param userId
     * @param roleIds
     * @return
     */
    Integer cancelUserRoles(@Param("userId")String userId, @Param("roleIds")String roleIds);


    List<String> getRoleHavingUserList(@Param("roleId") String roleId);

    /**
     * 根据组织id或用户id查询所属角色
     * @param orgId
     * @param userId
     * @return
     */
    List<String> getUserHavingRoleList(@Param("orgId") String orgId, @Param("userId") String userId);


    void deleteByRoleId(@Param("roleId") String roleId);
    //删除某用户在某单位中的全部角色
    void deleteByUserIdAndOrgId(@Param("userId")String userId);

    void deleteAllOldByOldOrg();

    void deleteAllOldByOldRole();

    void deleteAllOldByOldUser();


    IPage<SysUser> getSysUserByRole(@Param("page")Page<SysUser> page, @Param("vo")SysUserRoleQueryVo vo);

}
